﻿using SharpCommon.File;
using SharpCommon.Logging.Layout;

namespace SharpCommon.Logging.Targets
{
    internal class FileTarget : BaseTarget
    {
        private object _obj = new object();

        public static readonly FileTarget Instance = new FileTarget();

        private FileTarget()
        {
        }

        public override void Write(LogInfo logInfo)
        {
            //这边可以通过文件名来判断是否要加写锁
            //还有要注意文件名称是可以配得



            lock (_obj)
            {
                //①判断文件的命名方式：默认 → 日期 + LogType
                //默认是C盘
                string filePath = @"C:\";
                string fileName = logInfo.Date.ToString("yyyy-MM-dd") + "-" + logInfo.LogLevel + ".txt";

                //②这边还需要判断一下数据格式，这是很重要的，如Xml，Json，Noraml

                //③然后判断是否已经存在该文件

                //★报错 - 路径中有非法字符，需要过滤 - "C:\\2014-02-22\tError.txt"

                //这边要注意文件资源不能一直被占用，不然会报错
                FileManager.AppendAllContents(filePath + fileName, new DefaultLayout().ToString(logInfo), true);
            }
        }
    }
}
